//using System;
//using System.Collections.Generic;
//using log4net;
//using log4net.Config;
//using log4net.Repository.Hierarchy;
//using log4net.Appender;
//using log4net.Layout;
//using System.Diagnostics;
//using System.Threading;
//
//namespace PowerSearch.Utils.Logger
//{
//	public class LoggerFactory
//	{
//		#region Constants
//
//		public const string DefaultFileExtension = "log";
//
//		public const string DefaultErrorLogger = "error";
//
//		#endregion
//
//		private static readonly IDictionary<string, ILog> loggers;
//		private static readonly object lockedObject = new object();
//
//		static LoggerFactory()
//		{
//			BasicConfigurator.Configure();
//			loggers = new Dictionary<string, ILog>();
//			Register(string.Empty, DefaultErrorLogger);
//		}
//
//		#region Public methods
//
//		public static void Register(string directory, string loggerName)
//		{
//			Register(directory, loggerName, DefaultFileExtension);
//		}
//
//		public static void Register(string directory, string loggerName, string fileExtension)
//		{
//			Register(directory, loggerName, fileExtension, "%d %message%newline");
//		}
//
//		public static void Register(string directory, string loggerName, string fileExtension, string pattern)
//		{
//			try
//			{
//				AcquireLock();
//				Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();
//				var logger = hierarchy.GetLogger(loggerName) as log4net.Repository.Hierarchy.Logger;
//				RollingFileAppender roller = new RollingFileAppender();
//				PatternLayout patternLayout = new PatternLayout();
//				patternLayout.ConversionPattern = pattern;
//				patternLayout.ActivateOptions();
//				roller.Layout = patternLayout;
//				roller.LockingModel = new FileAppender.MinimalLock();
//				roller.AppendToFile = true;
//				roller.RollingStyle = RollingFileAppender.RollingMode.Size;
//				roller.MaxSizeRollBackups = 100;
//				roller.MaximumFileSize = "100KB";
//				roller.StaticLogFileName = true;
//				roller.File = directory + loggerName + "." + fileExtension;
//				roller.ActivateOptions();
//				logger.RemoveAllAppenders();
//				logger.AddAppender(roller);
//				loggers[loggerName] = LogManager.GetLogger(loggerName);
//			}
//			catch (Exception ex)
//			{
//				//Trace.WriteLine(ex.Message);
//			}
//			finally
//			{
//				ReleaseLock();
//			}
//		}
//
//		public static ILog GetLogger(string loggerName)
//		{
//			if (loggerName != null) loggerName = loggerName.Trim();
//			if (loggerName == "")
//				loggerName = DefaultErrorLogger;
//
//			ILog log = null;
//			if (!loggers.ContainsKey(loggerName))
//				Register(string.Empty, loggerName);
//			log = loggers[loggerName];
//			return log;
//		}
//
//		#endregion
//
//		#region Private methods
//
//		private static void AcquireLock()
//		{
//			Monitor.Enter(lockedObject);
//		}
//
//		private static void ReleaseLock()
//		{
//			Monitor.Exit(lockedObject);
//		}
//		#endregion
//	}
//}
//
